<!DOCTYPE HTML>
<html>
<head>
<title>StatusBarWait | AutoHotkey</title>
<meta name="description" content="The StatusBarWait command waits until a window's status bar contains the specified string." />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>StatusBarWait</h1>

<p>等待, 直到窗口的状态栏包含指定的字符串.</p>

<pre class="Syntax"><span class="func">StatusBarWait</span> <span class="optional">, BarText, Timeout, Part#, WinTitle, WinText, Interval, ExcludeTitle, ExcludeText</span></pre>
<h2>参数</h2>
<dl>

  <dt>BarText</dt>
  <dd><p>此命令所等待的文本或部分文本. 默认为空, 这意味着等待目标状态栏变成空的. 此文本是区分大小写的, 且匹配行为由 <a href="SetTitleMatchMode.htm">SetTitleMatchMode</a> 决定, 类似于下面的 <em>WinTitle</em>.</p>
    <p>要等待状态栏文本 <em>改变</em>, 请在循环中使用 <a href="StatusBarGetText.htm">StatusBarGetText</a>, 或像本页底部的例子那样使用 RegEx.</p></dd>

  <dt>Timeout</dt>
  <dd><p>在超时前等待的秒数(可以为小数或<a href="../Variables.htm#Expressions">表达式</a>), 超时后 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 会被设置为 1. 默认为空, 这意味着命令将会无限期等待. 指定 0 等同于指定 0.5.</p></dd>

  <dt>Part#</dt>
  <dd><p>要获取的状态栏的那一部分的编号, 可以为<a href="../Variables.htm#Expressions">表达式</a>. 默认为 1, 这部分通常包含了我们感兴趣的文本.</p></dd>

  <dt>WinTitle</dt>
  <dd><p>窗口标题或识别目标窗口的其他条件. 请参阅 <a href="../misc/WinTitle.htm">WinTitle</a>.</p></dd>

  <dt>WinText</dt>
  <dd><p>如果使用此参数, 那么它必须是目标窗口中单个文本元素的子字符串(和内置的 Window Spy 工具显示的一样). 当 <a href="DetectHiddenText.htm">DetectHiddenText</a> 的设置为 ON 时, 那么会检测到隐藏文本元素.</p></dd>

  <dt>Interval</dt>
  <dd><p>此命令在等待时对状态栏进行检查的时间间隔(单位为毫秒), 可以为<a href="../Variables.htm#Expressions">表达式</a>. 默认为 50. </p></dd>

  <dt>ExcludeTitle</dt>
  <dd><p>标题中含有此参数值的窗口将被排除.</p></dd>

  <dt>ExcludeText</dt>
  <dd><p>文本中含有此参数值的窗口将被排除.</p></dd>

</dl>

<h2>错误处理</h2>
<p><span class="ver">[v1.1.04+]</span>: 如果状态栏无法访问, 则此命令会抛出异常. 想了解更多信息, 请参阅<a href="Catch.htm#RuntimeErrors">运行时错误</a>.</p>
<p>如果在状态栏出现匹配文本前命令超时了, 则 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 被设置为 1. 如果状态栏无法访问, 则它被设置为 2. 成功找到匹配时则被设置为 0.</p>
<h2>备注</h2>
<p>StatusBarWait 尝试读取窗口中首个<em>标准</em>状态栏(类名 msctls_statusbar32). 某些程序使用它们自己的状态栏或微软通用控件的特殊版本. 此命令不支持这样的状态栏.</p>
<p>在大多数时候, 与其在循环中使用 <a href="StatusBarGetText.htm">StatusBarGetText</a>, 不如使用 StatusBarWait 来的有效率, 因为它包含了避免重复调用 <a href="StatusBarGetText.htm">StatusBarGetText</a> 形成的高开销的优化.</p>
<p>StatusBarWait 在开始等待匹配前会确定它的目标窗口. 如果那个目标窗口关闭了, 那么此命令会停止等待, 即使存在另一个匹配指定 <em>WinTitle</em> 和 <em>WinText</em> 的窗口.</p>
<p>当此命令处于等待状态时, 可以通过<a href="../Hotkeys.htm">热键</a>, <a href="Menu.htm">自定义菜单项</a>或<a href="SetTimer.htm">计时器</a>启动新的<a href="../misc/Threads.htm">线程</a>.</p>
<p>窗口标题和文本是区分大小写的. 只有在打开 <a href="DetectHiddenWindows.htm">DetectHiddenWindows</a> 设置时, 才能检测到隐藏窗口.</p>

<h2>相关</h2>
<p><a href="StatusBarGetText.htm">StatusBarGetText</a>, <a href="WinGetTitle.htm">WinGetTitle</a>, <a href="WinGetText.htm">WinGetText</a>, <a href="ControlGetText.htm">ControlGetText</a></p>
<h2>示例</h2>
<div class="ex" id="ExSearch">
<p><a href="#ExSearch">#1</a>: 下面的例子输入新的搜索模式到现有的资源管理器/搜索窗口.</p>
<pre>if WinExist("Search Results") <em>; 设置上次找到的窗口以简化后面的代码.</em>
{
    WinActivate
    Send, {tab 2}!o*.txt{enter}  <em>; 在搜索窗口中, 输入要搜索的模式.</em>
    Sleep, 400  <em>; 给状态栏时间, 等它改变为 "Searching".</em>
    StatusBarWait, found, 30
    if ErrorLevel
        MsgBox, The command timed out or there was a problem.
    else
        MsgBox, The search successfully completed.
}</pre>
</div>

<div class="ex" id="ExChange">
<p><a href="#ExChange">#2</a>: 下面的例子等待活动窗口的状态栏 <strong>发生变化</strong>. 此例子需要 <span class="ver">[v1.0.46.06+]</span.</p>
<pre>SetTitleMatchMode RegEx  <em>; 接受<a href="SetTitleMatchMode.htm#RegEx">正则表达式</a>, 以便在下面使用.</em>
if WinExist("A")  <em>; 设置上次找到的窗口为活动窗口(供下面使用).</em>
{
   StatusBarGetText, <span class="red">OrigText</span>
   StatusBarWait, ^(?!^\Q<span class="red">%OrigText%</span>\E$)  <em>; 该正则表达式等待文本发生任何变化.</em>
}</pre>
</div>

</body>
</html>